"""
自启动管理模块 - 管理应用程序的开机自启动设置
"""

import os
import sys
import winreg as reg

def set_autostart(enabled=True, app_name="FuckDesktop"):
    """
    设置或删除开机自启动项
    
    参数:
        enabled: 是否启用开机自启动
        app_name: 注册表中使用的应用名称
        
    返回:
        成功返回True，失败返回False
    """
    try:
        # 获取应用程序路径
        app_path = os.path.abspath(sys.argv[0])
        
        # 如果是.py文件，需要使用python解释器启动
        if app_path.endswith('.py'):
            app_path = f'"{sys.executable}" "{app_path}"'
        # 如果是.exe文件，直接使用路径
        elif app_path.endswith('.exe'):
            app_path = f'"{app_path}"'
            
        # 打开注册表项
        key_path = r"Software\Microsoft\Windows\CurrentVersion\Run"
        autorun_key = reg.OpenKey(
            reg.HKEY_CURRENT_USER,
            key_path,
            0, 
            reg.KEY_SET_VALUE | reg.KEY_QUERY_VALUE
        )
        
        # 根据需要设置或删除启动项
        if enabled:
            reg.SetValueEx(autorun_key, app_name, 0, reg.REG_SZ, app_path)
            print(f"已设置 {app_name} 开机自启动")
        else:
            try:
                # 检查键是否存在
                reg.QueryValueEx(autorun_key, app_name)
                # 如果存在，删除它
                reg.DeleteValue(autorun_key, app_name)
                print(f"已移除 {app_name} 开机自启动")
            except FileNotFoundError:
                # 键不存在，无需操作
                pass
        
        reg.CloseKey(autorun_key)
        return True
        
    except Exception as e:
        print(f"设置开机自启动时出错: {e}")
        return False

def is_autostart_enabled(app_name="FuckDesktop"):
    """
    检查应用是否已设置开机自启动
    
    参数:
        app_name: 注册表中使用的应用名称
        
    返回:
        如果已设置自启动返回True，否则返回False
    """
    try:
        # 打开注册表项
        key_path = r"Software\Microsoft\Windows\CurrentVersion\Run"
        autorun_key = reg.OpenKey(
            reg.HKEY_CURRENT_USER,
            key_path,
            0, 
            reg.KEY_QUERY_VALUE
        )
        
        try:
            # 查询值是否存在
            reg.QueryValueEx(autorun_key, app_name)
            exists = True
        except FileNotFoundError:
            # 值不存在
            exists = False
            
        reg.CloseKey(autorun_key)
        return exists
    
    except Exception as e:
        print(f"检查开机自启动状态时出错: {e}")
        return False


if __name__ == "__main__":
    # 测试代码
    current_status = is_autostart_enabled()
    print(f"当前自启动状态: {'已启用' if current_status else '未启用'}")
    
    # 切换状态
    new_status = not current_status
    set_autostart(new_status)
    
    # 验证更改
    if is_autostart_enabled() == new_status:
        print("自启动状态切换成功!")
    else:
        print("自启动状态切换失败!")
